#!/usr/bin/env python3
"""
AI配置迁移脚本
将敏感配置信息从config目录迁移到temp目录，避免意外提交到Git
"""

import os
import json
import shutil
from pathlib import Path
import logging

# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

def migrate_ai_config():
    """迁移AI配置"""
    config_file = Path("config/ai_config.json")
    temp_config_file = Path("temp/ai_config_runtime.json")
    
    print("🔧 AI配置迁移工具")
    print("=" * 50)
    
    # 检查配置文件是否存在
    if not config_file.exists():
        print("❌ 配置文件不存在: config/ai_config.json")
        print("   请先创建配置文件或运行 setup_local_model.py")
        return False
    
    try:
        # 读取现有配置
        with open(config_file, 'r', encoding='utf-8') as f:
            config = json.load(f)
        
        print(f"📖 读取配置文件: {config_file}")
        
        # 检查是否有敏感信息
        has_sensitive_info = False
        sensitive_models = []
        
        if 'models' in config:
            for model_key, model_config in config['models'].items():
                if model_config.get('api_key', '').strip():
                    has_sensitive_info = True
                    sensitive_models.append(model_key)
        
        if not has_sensitive_info:
            print("ℹ️  未检测到敏感信息，无需迁移")
            print("   所有API密钥字段都是空的")
            return True
        
        print(f"⚠️  检测到敏感信息在以下模型中: {', '.join(sensitive_models)}")
        
        # 确认迁移
        response = input("是否继续迁移敏感信息到临时文件? (y/N): ").strip().lower()
        if response not in ['y', 'yes']:
            print("❌ 用户取消迁移")
            return False
        
        # 确保temp目录存在
        temp_config_file.parent.mkdir(exist_ok=True)
        
        # 保存包含敏感信息的配置到临时文件
        with open(temp_config_file, 'w', encoding='utf-8') as f:
            json.dump(config, f, ensure_ascii=False, indent=2)
        
        print(f"✅ 敏感配置已保存到: {temp_config_file}")
        
        # 清理默认配置文件中的敏感信息
        clean_config = config.copy()
        if 'models' in clean_config:
            for model_key, model_config in clean_config['models'].items():
                if 'api_key' in model_config:
                    model_config['api_key'] = ''
        
        # 备份原配置文件
        backup_file = config_file.with_suffix('.json.backup')
        shutil.copy2(config_file, backup_file)
        print(f"📋 原配置文件已备份到: {backup_file}")
        
        # 保存清理后的配置
        with open(config_file, 'w', encoding='utf-8') as f:
            json.dump(clean_config, f, ensure_ascii=False, indent=2)
        
        print(f"✅ 默认配置文件已清理: {config_file}")
        print("   所有API密钥字段已清空")
        
        print("\n🎉 配置迁移完成!")
        print("\n📝 说明:")
        print("   - 敏感信息现在存储在 temp/ai_config_runtime.json")
        print("   - 该文件已被 .gitignore 忽略，不会被提交到Git")
        print("   - 默认配置文件 config/ai_config.json 不再包含敏感信息")
        print("   - 应用会自动从临时文件加载包含API密钥的配置")
        
        return True
        
    except Exception as e:
        logger.error(f"配置迁移失败: {e}")
        print(f"❌ 配置迁移失败: {e}")
        return False

def check_gitignore():
    """检查.gitignore是否包含temp目录"""
    gitignore_file = Path(".gitignore")
    
    if not gitignore_file.exists():
        print("⚠️  .gitignore文件不存在")
        return False
    
    try:
        with open(gitignore_file, 'r', encoding='utf-8') as f:
            content = f.read()
        
        if 'temp/' in content or 'temp\\' in content:
            print("✅ .gitignore已包含temp目录")
            return True
        else:
            print("⚠️  .gitignore未包含temp目录")
            print("   建议添加 'temp/' 到 .gitignore 文件")
            return False
    except Exception as e:
        print(f"❌ 检查.gitignore失败: {e}")
        return False

def main():
    """主函数"""
    print("🔧 AI配置迁移工具")
    print("=" * 50)
    
    # 检查.gitignore
    check_gitignore()
    print()
    
    # 执行迁移
    success = migrate_ai_config()
    
    if success:
        print("\n✅ 迁移完成!")
    else:
        print("\n❌ 迁移失败!")
        return 1
    
    return 0

if __name__ == "__main__":
    exit(main()) 